#include <iostream>
#include <string.h>
using namespace std;
//写时复制，不进行写操作的时候只是进行浅拷贝，用赋值运算符函数，
//进行写操作的时候执行深拷贝，深拷贝用拷贝构造函数
class String{
public:
    //无参构造函数
    String()
    :_pstr(new char[1+4]+4)    
    {
        cout<<"no para"<<endl;
    }
    //普通构造函数
    String(const char *pstr)
    :_pstr(new char[strlen(pstr)+1+4]()+4)
    {
        strcpy(_pstr,pstr);
        *(int*)(pstr-4)=1;
        cout<<"Stirng"<<endl;
    }
    //析构函数
    ~String(){
        if(_pstr){
            delete []_pstr;
            _pstr=nullptr;
            cout<<"~String"<<endl;
        }
    }
    //拷贝构造函数
    String(const String & rhs)
    :_pstr(rhs._pstr)
    ,_refcount(rhs._refcount)
    {
        
    }
    String & operator=(const String & rhs ){

    }
    void getrefcount(){
        cout<<*(int*)(_pstr-4)<<endl;
    }
private:
char * _pstr;
int _refcount;
};
void test(){
    String s2;
    String s1("hello");
}

int main(int argc, char * argv[]){
    test();    
    return 0;
}

